In [2]:
import numpy as np
import pandas as pd
from pandas_datareader import data as wb
import matplotlib.pyplot as plt

In [18]:
tickers = ['PG', 'BRK']
sec_data = pd.DataFrame()
for t in tickers:
    sec_data[t] = wb.DataReader(t, data_source='google', start='2007-1-1')['Close']

In [19]:
sec_data.tail()


Out[19]:
PG BRK
Date
2017-05-23 86.08 2485.00
2017-05-24 86.50 2539.88
2017-05-25 86.86 2550.00
2017-05-26 87.25 2546.10
2017-05-30 87.40 2497.50

In [20]:
sec_returns = np.log(sec_data / sec_data.shift(1))

In [21]:
sec_returns


Out[21]:
PG BRK
Date
2007-01-03 NaN NaN
2007-01-04 -0.007621 0.021787
2007-01-05 -0.008624 0.000000
2007-01-08 0.002202 0.000000
2007-01-09 -0.002517 -0.016296
2007-01-10 0.011901 -0.005492
2007-01-11 0.006207 0.013129
2007-01-12 0.005554 0.000000
2007-01-16 0.000000 0.000000
2007-01-17 0.005523 0.029981
2007-01-18 0.002750 0.000000
2007-01-19 0.008357 -0.004228
2007-01-22 -0.005614 0.016807
2007-01-23 -0.001218 0.000000
2007-01-24 -0.001982 0.000000
2007-01-25 -0.009047 0.000000
2007-01-26 -0.000925 -0.012579
2007-01-29 0.000308 0.012579
2007-01-30 -0.004480 -0.008368
2007-01-31 0.004326 0.028988
2007-02-01 0.007219 0.008130
2007-02-02 0.000000 0.000000
2007-02-05 -0.002912 0.007060
2007-02-06 -0.008633 0.005013
2007-02-07 -0.001705 -0.020203
2007-02-08 0.001705 0.016195
2007-02-09 -0.002480 -0.036814
2007-02-12 -0.004199 0.020619
2007-02-13 0.008536 0.000000
2007-02-14 0.002624 0.000000
... ... ...
2017-04-18 0.004526 NaN
2017-04-19 -0.013304 0.039235
2017-04-20 -0.003018 0.005563
2017-04-21 -0.007980 0.016529
2017-04-24 0.010440 -0.040627
2017-04-25 0.005013 0.017409
2017-04-26 -0.025432 0.041780
2017-04-27 -0.000570 0.013245
2017-04-28 -0.004114 0.000454
2017-05-01 -0.002752 NaN
2017-05-02 -0.010040 NaN
2017-05-03 0.002433 0.002301
2017-05-04 0.000231 -0.018562
2017-05-05 0.000578 0.052464
2017-05-08 0.000578 0.021979
2017-05-09 -0.001735 -0.016660
2017-05-10 0.001041 0.043683
2017-05-11 -0.003707 -0.032254
2017-05-12 0.000232 0.022900
2017-05-15 0.001623 -0.010305
2017-05-16 -0.001043 0.012439
2017-05-17 0.000232 0.000000
2017-05-18 -0.004531 0.012286
2017-05-19 0.004300 -0.010582
2017-05-22 -0.000348 0.021333
2017-05-23 -0.001509 0.034525
2017-05-24 0.004867 0.021844
2017-05-25 0.004153 0.003977
2017-05-26 0.004480 -0.001531
2017-05-30 0.001718 -0.019273

2620 rows × 2 columns

P&G


In [10]:
sec_returns['PG'].mean() # Daily average return


Out[10]:
0.00011577323254588571

In [11]:
sec_returns['PG'].mean() * 250 # Anually average return


Out[11]:
0.028943308136471429

In [12]:
sec_returns['PG'].std() # standard deviation


Out[12]:
0.011145339029843894

In [13]:
sec_returns['PG'].std() * 250 ** 0.5 # volatility or risk


Out[13]:
0.17622328314539032

Berkshire Hathaway


In [14]:
sec_returns['BRK'].mean()


Out[14]:
0.00089494073532717718

In [15]:
sec_returns['BRK'].mean() * 250


Out[15]:
0.2237351838317943

In [16]:
sec_returns['BRK'].std()


Out[16]:
0.020296371984118138

In [17]:
sec_returns['BRK'].std() * 250 ** 0.5


Out[17]:
0.32091381853922074

In [22]:
sec_returns[['PG', 'BRK']].std() * 250 ** 0.5 # comparing


Out[22]:
PG     0.176223
BRK    0.320914
dtype: float64

According to this analysis, BRK is riskier than PG.


In [ ]: